/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package videogest;

import java.io.FileNotFoundException;
import java.io.IOException;

import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import persistencia.*;

/**
 *
 * @author JAVA
 */
public class Videojuego extends Producto {

    String plataforma; // esto abria que ponerlo en un enumerado.
    int numJugadores;
    String distribuidor;

    public Videojuego(String nombre, String sinopsis,
            String genero, Clasificacion precioAlquiler, float precioVenta,
            String plataforma, int numJugadores, String distribuidor) throws FileNotFoundException, IOException {
        super(Codigo.Videojuego, nombre, sinopsis, genero, precioAlquiler, precioVenta);
        this.plataforma = plataforma;
        this.numJugadores = numJugadores;
        this.distribuidor = distribuidor;
    }

    public Videojuego(String codigo, String nombre, String sinopsis,
            String genero, Clasificacion precioAlquiler, float precioVenta,
            String plataforma, int numJugadores, String distribuidor, boolean baja, boolean alquilado, Date estreno) throws FileNotFoundException, IOException {
        super(codigo, nombre, sinopsis, genero, precioAlquiler, precioVenta, baja, alquilado, estreno);
        this.plataforma = plataforma;
        this.numJugadores = numJugadores;
        this.distribuidor = distribuidor;
    }

    public String getDistribuidor() {
        return distribuidor;
    }

    public void setDistribuidor(String distribuidor) {
        this.distribuidor = distribuidor;
    }

    public Clasificacion getPrecioAlquiler() {
        return precioAlquiler;
    }

    public void setPrecioAlquiler(Clasificacion precioAlquiler) {
        this.precioAlquiler = precioAlquiler;
    }

    public int getNumJugadores() {
        return numJugadores;
    }

    public void setNumJugadores(int numJugadores) {
        this.numJugadores = numJugadores;
    }

    public String getPlataforma() {
        return plataforma;
    }

    public void setPlataforma(String plataforma) {
        this.plataforma = plataforma;
    }

    //  Devuelvo un videojuego
    public static Videojuego dameVideojuego(String codigo) throws FileNotFoundException, IOException, ParseException {

        return persistenciaVideojuego.dameVideoJuego(codigo);

    }

    @Override
    public void alta() {

        persistenciaVideojuego.alta(this);
        
    }

    @Override
    public void modificar() {

        persistenciaVideojuego.modificar(this);

   }

    //Sobreescribimos el toString para mostrar los videojuegos tal y como queremos
    @Override
    public String toString() {
        /*String codigo, String nombre, String sinopsis,
        String genero, Clasificacion precioAlquiler, float precioVenta,
        String plataforma, int numJugadores, String distribuidor)*/

        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

        String ret = "\n";
        try {
            ret += "================================================\n";
            ret += "|              DATOS DEL VIDEOJUEGO\n";
            ret += "================================================\n";
            ret += "|-- Codigo: " + super.getCodigo() + "\n";
            ret += "|-- Nombre: " + super.getNombre() + "\n";
            ret += "|-- Sinopsis: " + super.getSinopsis() + "\n";
            ret += "|-- Genero: " + super.getGenero() + "\n";
            ret += "|-- PrecioAlquiler: " + this.getPrecioAlquiler().getClasificacion() + "\n";
            ret += "|-- PrecioVenta: " + super.getPrecioVenta() + "\n";
            ret += "|-- Plataforma: " + this.getPlataforma() + "\n";
            ret += "|-- Numero de Jugadores: " + this.getNumJugadores() + "\n";
            ret += "|-- Distribuidor: " + this.getDistribuidor() + "\n";
            ret += "|-- Bloqueada: " + super.isBaja() + "\n";
            ret += "|-- Alquilado: " + this.isAlquilado() + "\n";
            ret += "|-- Estreno: " + df.format(this.getEstreno()) + "\n";
            ret += "======================================================\n";
        } catch (Exception e) {
            ret = "El videojuego que busca no existe en nuestro videoclub";
        }
        return ret;
    }

    //Dos Videojuegos seran iguales cuando tienen el mismo código
    @Override
    public boolean equals(Object o) {
        boolean res = false;
        if (o instanceof Videojuego) {
            Videojuego vj = (Videojuego) o;
            if (this.getCodigo() == (vj.getCodigo())) {
                res = true;
            }
        }
        return res;
    }

    //Sobreescribimos el hashCode que es necesario para tener el equals
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 61 * hash + (this.plataforma != null ? this.plataforma.hashCode() : 0);
        hash = 61 * hash + this.numJugadores;
        hash = 61 * hash + (this.distribuidor != null ? this.distribuidor.hashCode() : 0);
        return hash;
    }

    @Override
    public Producto dameProducto(String codigo) {
        
        Producto producto = null;
        try {
            producto = persistenciaVideojuego.dameVideoJuego(codigo);
        } catch (ParseException ex) {
            Logger.getLogger(Videojuego.class.getName()).log(Level.SEVERE, null, ex);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Videojuego.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Videojuego.class.getName()).log(Level.SEVERE, null, ex);
        }



        return producto;
    }
}
